package com.doubao.wechat.service;

import com.doubao.common.result.Result;
import com.doubao.wechat.entity.RefundOrder;

import java.util.List;

/**
 * 退款服务接口
 */
public interface RefundService {

    /**
     * 创建退款申请
     *
     * @param userId 用户ID
     * @param outTradeNo 商户订单号
     * @param amount 退款金额（单位：分）
     * @param reason 退款原因
     * @return 退款申请结果
     */
    Result<RefundOrder> createRefund(Long userId, String outTradeNo, Integer amount, String reason);

    /**
     * 查询退款单
     *
     * @param outRefundNo 商户退款单号
     * @return 退款单
     */
    Result<RefundOrder> getRefundByOutRefundNo(String outRefundNo);

    /**
     * 查询订单的所有退款记录
     *
     * @param outTradeNo 商户订单号
     * @return 退款记录列表
     */
    Result<List<RefundOrder>> getRefundsByOutTradeNo(String outTradeNo);

    /**
     * 查询用户的退款记录
     *
     * @param userId 用户ID
     * @return 退款记录列表
     */
    Result<List<RefundOrder>> getUserRefunds(Long userId);

    /**
     * 更新退款状态
     *
     * @param outRefundNo 商户退款单号
     * @param status 退款状态
     * @param refundId 微信退款单号
     * @return 更新结果
     */
    Result<Void> updateRefundStatus(String outRefundNo, String status, String refundId);
}